package com.ce.util;

import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.ce.framework.util.StringUtil;
import com.ce.sys.login.model.User;
import com.ce.sys.role.dao.po.SysRolePermiss;

public class PermissUtil {


	/**
	 * 开发人： andy
	 * 开发时间： 2013-11-6 下午03:37:49
	 * 功能描述：
	 * 方法的参数和返回值
	 * @param optName
	 * @param menuId
	 * @param menuUrl
	 * @return
	 * boolean 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public static boolean isHavePermiss(String optName,String menuUrl ){
		User user = User.getUser();
		//超级用户时拥有所有权限
		if(user.isSuperUser()){
			return true;
		}
		String realMenuId = null;
	    if(StringUtil.isNotBlank(menuUrl)){
	    	realMenuId = MenuUtil.getMenuId(menuUrl);
	    }
	    if(StringUtil.isBlank(realMenuId)){
		    HttpServletRequest request = ServletActionContext.getRequest();
	    	realMenuId = (String) request.getAttribute("menuId");
	    }
		return isHavePermissByMenuId(optName,realMenuId);
	}

	public static boolean isHavePermissByMenuId(String optName,String menuId ){
		User user = User.getUser();
		if(user==null){
			return false;
		}
		//超级用户时拥有所有权限
		if(user.isSuperUser()){
			return true;
		}
	    if(StringUtil.isNotBlank(menuId)){
	    	String opts  = getOptsByMenu(menuId, user.getVcId());
	    	if(opts.indexOf(","+optName+",")>=0){
	    		return true;
	    	}
	    }
		return false;
	}

	public static boolean isHaveUrlPermiss(String menuId){
		User user = User.getUser();
		//超级用户时拥有所有权限
		if(user.isSuperUser()){
			return true;
		}
		String realMenuId = menuId;
	    if(StringUtil.isBlank(realMenuId)){
		    HttpServletRequest request = ServletActionContext.getRequest();
	    	realMenuId = (String) request.getAttribute("menuId");
	    }
		List<?> permissList  = DbUtil.executeHql("from SysRolePermiss po where (po.vcRoleId = 'common' or po.vcRoleId in " +
				"( select r.vcRoleId from SysAccountRole r where r.vcUserId = '"+user.getVcId()+"'))" +
			    " and po.vcMenuId = '"+menuId+"'");
	    if(permissList.size()>0){
	    	return true;
	    }
		return false;
	}
	
	/**
	 * 开发人： andy
	 * 开发时间： 2013-11-6 下午03:11:23
	 * 功能描述：
	 * 方法的参数和返回值
	 * @param optName
	 * @return
	 * boolean 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public static boolean isHavePermiss(String optName){
		return PermissUtil.isHavePermiss(optName, null);
	}
	
	
	/**
	 * 开发人： andy
	 * 开发时间： 2013-11-1 下午05:48:03
	 * 功能描述：获取某个菜单项的所有操作功能的字符串
	 * 方法的参数和返回值
	 * @param menuid
	 * @param userid
	 * @return
	 * String 类似 "add,modify,delete" 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	private static String getOptsByMenu(String menuid,String currUserId){
		String optsHql = "from SysRolePermiss po where (po.vcRoleId = 'common' or  po.vcRoleId in " +
		"( select r.vcRoleId from SysAccountRole r where r.vcUserId = '"+currUserId+"'))" +
	    " and po.vcMenuId = '"+menuid+"'";
		List<?> permissList  = DbUtil.executeHql(optsHql);
		Iterator<?> it = permissList.iterator();
		String opts = ",";
		while(it.hasNext()){
			SysRolePermiss permiss = (SysRolePermiss)it.next();
			if(StringUtil.isNotBlank(permiss.getVcOperation()))
				opts = opts + permiss.getVcOperation()+",";
		}
		return opts;
	}
}
